import { createRouter, createWebHistory } from 'vue-router'
import constantRoutes from './routes'
import NProgress from 'nprogress'
import { localCache } from '@/utils/cache'
import 'nprogress/nprogress.css'
import emitter, { router_change, menu_loading } from '@/emitter'
import { menusMapToRoutes, firstMenu } from '@/utils'
// import useLoginStore from '@/store/login'
// import { pinia } from '@/store'
// import { LOGIN_TOKEN } from '@/global/constants'

const { BASE_URL } = import.meta.env
// console.log(import.meta)

// const loginStore = useLoginStore(pinia)

/**
 * 创建路由器实例
 */
const router = createRouter({
  // 使用HTML5的History模式
  history: createWebHistory(BASE_URL),
  // 路由配置
  routes: constantRoutes,
  // 滚动行为
  scrollBehavior() {
    // 滚动到顶部
    return {
      top: 0,
      // 平滑滚动
      behavior: 'smooth'
    }
  }
})

//#region 全局监听事件处理

emitter.on(router_change, (path: string) => {
  router.push(path)
})

// emitter.on(api_fail, (_, code: number) => {
//   if (code === 401) {
//     router.push('/login')
//   }
// })

/** 登入后加载菜单 */
emitter.on(menu_loading, (menus: any[]) => {
  const routes = menusMapToRoutes(menus)
  routes.forEach((route) => {
    router.addRoute('main', route)
  })
})

//#endregion

/**
 * 路由前置守卫
 * 参数：to(跳到的页面), from(从哪个页面跳转的), next(放行函数）
 */
router.beforeEach((to) => {
  // 开始进度条
  NProgress.start()
  const token = localCache.get('TOKEN')
  // const userInfo = loginStore.userInfo
  if (to.path.startsWith('/main') && !token) {
    return '/login'
  }
  if (to.path === '/main' && token) {
    return firstMenu?.url
  }
})

router.afterEach((to) => {
  if (to.meta && to.meta.title) {
    document.title = `${to.meta.title}|后台管理系统`
  }
  // 完成进度条
  NProgress.done()
})
export default router

// router.beforeEach(async (to, from, next) => {
//   // 开始进度条
//   NProgress.start()
//   const token = loginStore.token
//   const userInfo = loginStore.userInfo
//   // if (to.path.startsWith('/main') && !token) {
//   //   return '/login'
//   // }
//   // if (to.path === '/main' && token) {
//   //   return firstMenu?.url
//   // }
//   if (token) {
//     if (to.path === '/login') {
//       next(firstMenu?.url ?? '/main')
//     } else {
//       if (userInfo) {
//         next()
//       } else {
//         try {
//           await loginStore.loadLocalCacheAction()
//           next()
//         } catch (err) {
//           loginStore.logout()
//           next({ path: '/login', query: { redirect: to.path } })
//         }
//       }
//     }
//   } else {
//     if (to.path === '/login') {
//       next()
//     } else {
//       next({ path: '/login', query: { redirect: to.path } })
//     }
//   }
//   next()
// })
